import os
import sys
from flask import Flask
from dotenv import load_dotenv
import pytz
from datetime import datetime

# 将当前目录添加到Python路径中
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# 加载环境变量
load_dotenv()

def create_app():
    app = Flask(__name__)
    
    # 配置
    app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
    app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL')
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    
    # 设置时区为东八区（北京时间）
    app.config['TIMEZONE'] = 'Asia/Shanghai'
    
    # 确保必要的目录存在
    os.makedirs('static/uploads', exist_ok=True)
    os.makedirs('static/datasets', exist_ok=True)
    os.makedirs('static/models', exist_ok=True)
    
    # 注册数据库
    from models import db
    db.init_app(app)
    
    # 创建表
    with app.app_context():
        db.create_all()
    
    # 注册蓝图
    # 动态导入routes模块
    import importlib.util
    spec = importlib.util.spec_from_file_location("routes", os.path.join(os.path.dirname(os.path.abspath(__file__)), "routes.py"))
    routes = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(routes)
    app.register_blueprint(routes.main)
    
    # 初始化摄像头捕获管理器
    from camera_capture import CameraCapture
    app.camera_capture = CameraCapture()
    
    # 添加时区处理的模板过滤器
    @app.template_filter('beijing_time')
    def beijing_time_filter(dt):
        if dt:
            # 将UTC时间转换为北京时间
            utc = pytz.timezone('UTC')
            beijing = pytz.timezone('Asia/Shanghai')
            utc_time = utc.localize(dt)
            beijing_time = utc_time.astimezone(beijing)
            return beijing_time.strftime('%Y-%m-%d %H:%M:%S')
        return '未知'
    
    return app

if __name__ == '__main__':
    app = create_app()
    app.run(debug=True, host='0.0.0.0', port=5500)